草庐IT

C++ 指向 vector 的指针

全部标签

c++ - 指针算术和取消引用

在下面的代码中,任何人都可以向我解释一下粗体行是做什么的。structsouthParkRec{intstan[4];int*kyle[4];int**kenny;stringcartman;};intmain(){southParkReccartoon;cartoon.stan[1]=4;cartoon.kyle[0]=cartoon.stan+1;cartoon.kenny=&cartoon.kyle[2];*(cartoon.kenny+1)=cartoon.stan;//Whatdoesthislinedo?return0;} 最佳答案

c++ - 如何将成员函数作为函数指针传递?

我想给worker类(Class)增加一个记录器功能,如何将成员函数作为函数指针传递?使用mem_fun?这里是代码示例:classWork{public:void(*logger)(conststring&s);voiddo_sth(){if(logger)logger("onlog")};};classsP{public:voidlog(conststring&s)(cout编辑:我不想使用void(P::*xxx)()因为它坚持类P...我知道C++隐藏某事,真正的日志函数是:voidlog(P&p,conststring&s),而真正的项目是这样的:我创建了一个CDialog,

c++ - 无法创建以 vector 为键和自定义类为值的 map

我创建了下面的抽象类来评估简单游戏的棋盘位置。抽象类被每个派生类覆盖,所以在game.h中只定义了评估函数我试图通过使用内存来提高我的程序的效率,但我无法让我的map正常工作。编译器对行results[board]=best抛出错误。此行试图将映射到当前棋盘(整数vector)的值设置为从该位置开始的最佳可能移动。Move是我创建的一个类,它只包含一个分数、一个要删除以制作下一个板的数字,以及要从中删除数字的索引(堆)。“results[board]=best”的编译器错误表示没有匹配的函数调用move::move()。我不明白这个错误,因为我不是要创建新的着法,只是存储当前的最佳着法

c++ - 什么时候删除由 (char *) 作为函数参数指向的内存?

代码1:voidfoo(char*text){}foo("Test");据我所知,这将会发生:内存分配给“测试”指针被创建并将其值复制到(char*textpointer),因此(char*text)指向内存中的位置,其中“Test”是(最好说,在第一个字符上"测试")函数执行完后,销毁了指向“Test”开头的指针(char*text),这不是内存泄漏吗?问题是,“Test”什么时候被删除,什么时候函数只销毁指针做某事不是更好吗?像那样?:char*_text="Test";foo(_text);delete[]_text; 最佳答案

C++ 将方法指针作为模板参数传递

我有一个这样的调用函数:templatevoidCallMethod(T*object){(object->*method)(args);}虽然这很完美:void(*function)(A*)=&CallMethod;这段代码在第二行没有编译错误:void(A::*method)()=&A::method;void(*function)(A*)=&CallMethod;有什么办法可以解决吗?我需要CallMethod模板获取指向存储在变量中的方法的常量指针。 最佳答案 所有模板参数必须在编译时已知。所以如果method真的是一个变量

c++ - 什么类型的指针操作

我搜索了很多,但找不到任何有用的东西-但后来我不确定我正在搜索正确的东西。是否有任何标准定义的标量必须至少与指针一样大?IE。sizeof(?)>=sizeof(void*).我需要它,因为我正在编写一个小型垃圾收集器并且想要类似这样的东西:structTag{uint32_tdesc:sizeof(uint32_t)*8-2;//pointertotypedescriptoruint32_tfree:1;uint32_tmark:1;};我更喜欢根据标准有效的东西(如果我们这样做,我很惊讶sizeof(uint32_t)*8-2对于位域定义有效-但VS2010允许它)。那么size_

c++ - 在 LLVM 中生成函数指针

我正在编写我的第一个LLVM示例。我正在尝试构建一个小型LLVM模块,该模块由一个函数组成,该函数接受一个函数的名称并返回一个指向它的指针。问题是我不知道如何在LLVM中生成函数指针。我通过调用getDeclaration(...)获得了一个Function对象。有什么方法可以获得指向它的指针吗? 最佳答案 Function是一个GlobalValue,所以它本身就是一个指针。同时,您可以使用LLVM的C++后端生成C++API调用,这将重新创建您提供给llc的IR。例如,将以下代码输入http://llvm.org/demo:vo

c++ - 智能指针 : cast between base and derived classes

假设你有这样一个函数:SmartPtrdoSomething(SmartPtra);像这样的类:classA{}classB:publicA{}现在我这样做:SmartPtrfoo=newB();doSomething(foo);现在,我想取回一个SmartPtr来自doSomething的对象.SmartPtrb=doSomething(foo);这可能吗?我需要做什么样的选角?现在,我刚发现一些我认为丑陋的东西:B*b=(B*)doSomething().get()重要说明:我无权访问SmartPtr和doSomething()代码。 最佳答案

没有显式指针的 C++ 多态调用

如果我有基类:structBase{voidfoo(){bar();}virtualvoidbar(){}};和派生类:structDerived:publicBase{voidbar(){cerr写这段代码的时候会发生:Derivedd;d.foo();我将看到打印“Derivedhere”——因为调用了Derived::bar。但是我没有通过指向基的指针调用,而是在这里工作的多态性。为什么?是不是因为Base::foo中对bar的调用实际上隐式调用了this->bar()和bar在类的vtable中查找? 最佳答案 您的猜测完全

C++,从同一个原始对象复制的多个对象中的成员指针的 'coupling'

#include#include#include#includestructs_A{boolbin;s_A():bin(0){}};classc_A{public:s_A*p_struct;c_A():p_struct(NULL){p_struct=news_A[16];}voidReset(){delete[]p_struct;p_struct=news_A[16];}};intmain(){srand(1);intx=30;std::vectorobjects;objects.assign(x,c_A());std::vectorobjects_copy;for(intq=0;q不